package com.accelstack.cmp.service;

import com.accelstack.cmp.entity.ImageTemplateVersion;
import com.accelstack.cmp.repository.ImageTemplateVersionRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

/**
 * 镜像模板版本服务
 */
@Service
@RequiredArgsConstructor
@Slf4j
@Transactional(readOnly = true)
public class ImageTemplateVersionService {

    private final ImageTemplateVersionRepository imageTemplateVersionRepository;

    /**
     * 创建镜像模板版本
     * @param imageTemplateVersion 待创建的镜像模板版本实体
     * @return 创建后的镜像模板版本实体
     */
    @Transactional
    public ImageTemplateVersion create(ImageTemplateVersion imageTemplateVersion) {
        log.info("创建镜像模板版本: 版本号={}", imageTemplateVersion.getVersion());
        return imageTemplateVersionRepository.save(imageTemplateVersion);
    }

    /**
     * 更新镜像模板版本
     * @param id 镜像模板版本ID
     * @param updatedImageTemplateVersion 包含更新信息的镜像模板版本实体
     * @return 更新后的镜像模板版本实体，如果不存在则返回Optional.empty()
     */
    @Transactional
    public Optional<ImageTemplateVersion> update(Long id, ImageTemplateVersion updatedImageTemplateVersion) {
        log.info("更新镜像模板版本: ID={}, 版本号={}", id, updatedImageTemplateVersion.getVersion());
        return imageTemplateVersionRepository.findById(id)
                .map(imageTemplateVersion -> {
                    imageTemplateVersion.setTemplate(updatedImageTemplateVersion.getTemplate());
                    imageTemplateVersion.setVersion(updatedImageTemplateVersion.getVersion());
                    imageTemplateVersion.setChangelog(updatedImageTemplateVersion.getChangelog());
                    imageTemplateVersion.setDockerImage(updatedImageTemplateVersion.getDockerImage());
                    imageTemplateVersion.setCpuCores(updatedImageTemplateVersion.getCpuCores());
                    imageTemplateVersion.setMemoryMb(updatedImageTemplateVersion.getMemoryMb());
                    imageTemplateVersion.setGpuCount(updatedImageTemplateVersion.getGpuCount());
                    imageTemplateVersion.setGpuType(updatedImageTemplateVersion.getGpuType());
                    imageTemplateVersion.setStorageGb(updatedImageTemplateVersion.getStorageGb());
                    imageTemplateVersion.setPorts(updatedImageTemplateVersion.getPorts());
                    imageTemplateVersion.setEnvVars(updatedImageTemplateVersion.getEnvVars());
                    imageTemplateVersion.setCommands(updatedImageTemplateVersion.getCommands());
                    imageTemplateVersion.setIsDefault(updatedImageTemplateVersion.getIsDefault());
                    return imageTemplateVersionRepository.save(imageTemplateVersion);
                });
    }

    /**
     * 根据ID删除镜像模板版本
     * @param id 镜像模板版本ID
     */
    @Transactional
    public void deleteById(Long id) {
        log.info("删除镜像模板版本: ID={}", id);
        imageTemplateVersionRepository.deleteById(id);
    }

    /**
     * 根据ID查询镜像模板版本
     * @param id 镜像模板版本ID
     * @return 匹配的镜像模板版本实体
     */
    public Optional<ImageTemplateVersion> findById(Long id) {
        log.debug("查询镜像模板版本: ID={}", id);
        return imageTemplateVersionRepository.findById(id);
    }

    /**
     * 查询所有镜像模板版本（支持分页）
     * @param pageable 分页信息
     * @return 镜像模板版本分页列表
     */
    public Page<ImageTemplateVersion> findAll(Pageable pageable) {
        log.debug("查询所有镜像模板版本 - 页码: {}, 大小: {}", pageable.getPageNumber(), pageable.getPageSize());
        return imageTemplateVersionRepository.findAll(pageable);
    }

    /**
     * 查询所有镜像模板版本
     * @return 所有镜像模板版本列表
     */
    public List<ImageTemplateVersion> findAll() {
        log.debug("查询所有镜像模板版本");
        return imageTemplateVersionRepository.findAll();
    }
}

